// TODO: 数组的 pop push unshift shift 分别做什么?
    // 功能是什么?
    // 返回值是什么?
    // 是否会对原数组造成影响?

// TODO: 数组 slice 和 splice 的区别
    // 功能
    // 参数和返回值
    // 是否为纯函数

// TODO: ajax get 和 post 的区别
    // get 一般用于查询操作, post 一般用于提交操作
    // get 参数拼接在 url 上, post 放在请求体内
    // post 易于防止 CSRF
    
// const arr = [10, 20, 30, 40]

// TODO: pop 删除数组中的最后一个值, 返回删掉的item, 会对原数组造成影响
// const popRes = arr.pop()
// console.log(popRes, arr)

// TODO: shift 删除数组中的第一个值, 返回删掉的item, 会对原数组造成影响
// const shiftRes = arr.shift()
// console.log(shiftRes, arr)

// TODO: push 往数组尾部追加一个值, 返回数组的length, 会对原数组造成影响
// const pushRes = arr.push(50) // 返回 length
// console.log(pushRes, arr)

// TODO: unshift 往数组头部插入一个值, 返回数组的length, 会对原数组造成影响
// const unshiftRes = arr.unshift(5) // 返回 length
// console.log(unshiftRes, arr)



// TODO: 纯函数：1. 不改变源数组（没有副作用）；2. 返回一个数组
// const arr = [10, 20, 30, 40]

// // concat
// const arr1 = arr.concat([50, 60, 70])
// // map
// const arr2 = arr.map(num => num * 10)
// // filter
// const arr3 = arr.filter(num => num > 25)
// // slice
// const arr4 = arr.slice()

// TODO: 非纯函数
// // push pop shift unshift
// // forEach
// // some every
// // reduce

// const arr = [10, 20, 30, 40, 50]

// TODO: slice 纯函数
// const arr1 = arr.slice()
// const arr2 = arr.slice(1, 4);  // 包含第一个index, 但是不包含最后的index
// const arr3 = arr.slice(2)
// const arr4 = arr.slice(-2); // 截取数组最后2个item, 负数 从尾部开始, 最后一个是 -1

// TODO: splice 非纯函数, 第一个参数为index(start), 第二个参数为移出的个数
// const spliceRes = arr.splice(1, 2, 'a', 'b', 'c')
// // const spliceRes1 = arr.splice(1, 2)
// // const spliceRes2 = arr.splice(1, 0, 'a', 'b', 'c')
// console.log(spliceRes, arr)

const res = [10, 20, 30].map(parseInt)
console.log(res)

// 拆解, 直接 传入一个 parseInt 函数, 等价于 调用parseInt并传入 相应的参数
[10, 20, 30].map((num, index) => {
    return parseInt(num, index)
})
